/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package cz.muni.fi.rum.sender.senders;

import cz.muni.fi.rum.sender.command.RapRequest;
import java.util.List;

/**
 *
 * @author pmikulasek
 */
public interface MainSender {

    /**
     * Metoda prida <code>RapRequest</code> prikaz do fronty na odeslani. V pripade <code>BufferSenderu</code>.
     * V pripade <code>ForceSenderu</code> jej rovnou odesle. <b>Pro detailnejsi pochopeni se podivejte na {@link BufferSender} {@link ForceSender}.</b>
     *
     * @param request RapRequest ktery je urcen k odeslani.
     * @see BufferSender#addRequest(cz.muni.fi.rum.sender.command.RapRequest)
     * @see ForceSender#addRequest(cz.muni.fi.rum.sender.command.RapRequest) 
     */
    void addRequest(RapRequest request);

    /**
     * Metoda odebere RapRequest na zaklade requestId z fronty RapRequestu cekajich na odeslani.
     * 
     * @param request RapRequestu, ktery se ma odebrat ze seznamu na odeslani
     *
     * @see BufferSender#removeRequest(cz.muni.fi.rum.sender.command.RapRequest)
     * @see ForceSender#removeRequest(cz.muni.fi.rum.sender.command.RapRequest)
     *
     * @throws UnsupportedOperationException V pripade neimplementovanim nekterym ze senderu. Momentalne u <b>{@link ForceSender}</b>.
     */
    void removeRequest(RapRequest request);

    /**
     * Metoda odebere vsechny neodeslane RapRequesty z fronty na odeslani.
     * 
     * @see BufferSender#removeAllRequest()
     * @see ForceSender#removeAllRequest() 
     *
     * @throws UnsupportedOperationException V pripade neimplementovanim nekterym ze senderu. Momentalne u <b>{@link ForceSender}</b>.
     */
    void removeAllRequest();

    /**
     * Metoda odesle vsechny zpravy cekajici na odeslani.
     *
     * @see BufferSender#sendAllRequests()
     * @see ForceSender#sendAllRequests()
     *
     * @throws UnsupportedOperationException V pripade neimplementovanim nekterym ze senderu. Momentalne u <b>{@link ForceSender}</b>.
     */
    void sendAllRequests();

    /**
     * Metoda vrati seznam vsech neodeslanych requestu.
     * @return Seznam neodeslanych RapRequest
     */
    List<RapRequest> getAllRequests();
}
